﻿/*
1007 素数对猜想 (20 分)
让我们定义d
​n
​​ 为：d
​n
​​ =p
​n+1
​​ −p
​n
​​ ，其中p
​i
​​ 是第i个素数。显然有d
​1
​​ =1，且对于n>1有d
​n
​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<10
​5
​​ )，请计算不超过N的满足猜想的素数对的个数。

输入格式:
输入在一行给出正整数N。

输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:
20
输出样例:
4
*/

#pragma warning(disable: 4267)
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

namespace B1008 {
int main();

#include <stdio.h>
#include <stdlib.h>

int data[101] = {};

void print_array(int a[], int n) {
	for (int i = 0; i < n; i++) {
		if (i > 0)
			printf(" ");
		printf("%d", a[i]);
	}
	printf("\n");
}

void move_right(int a[], int n, int m) {
	int i, j, temp;
	for (i = 1; i <= m; i++) {
		temp = a[n - i];
		for (j = n - i - m; j >= 0; j -= m) {
			a[j + m] = a[j];
		}
		a[j + m] = temp;
	}
}

void move_left(int a[], int n, int m) {
	int i, j, temp;
	for (i = 0; i < m; i++) {
		temp = a[i];
		for (j = i + m; j < n; j += m) {
			a[j - m] = a[j];
		}
		a[j - m] = temp;
	}
}

int main() {
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/PTA(Basic)/data/1008.txt", "r", stdin);
	int n, m, k, i;
	int temp = 0;

	scanf("%d %d", &n, &m);
	for (i = 0; i < n; i++) {
		scanf("%d", data + i);
	}
	//print_array(data, n);
	if (m == 0) {}
	else if (m <= n / 2) {
		//*
		move_right(data, n, m);
		k = n % m;
		for (i = 0; i < k; i++) {
			move_left(data, m, 1);
		}
		//*/
	}
	else {//超过半数,则左移
		m = n - m;
		move_left(data, n, m);
		k = n % m;
		for (i = 0; i < k; i++) {
			move_right(data + n - m, m, 1);
		}
		/*
		for (i = 0; i < m; i++) {
			move_right(data, n, 1);
		}
		//*/

	}
	//*/
	print_array(data, n);
	return 0;
}
}

int main() {
	return B1008::main();
}